﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Anagramme.Contracts;
using System.ServiceModel;
using System.ComponentModel.Composition;

namespace Anagramme.Model
{
    /// <summary>
    /// Modèle pour les résultats
    /// </summary>
    [Export(typeof(IService))]
    [Export(typeof(IResultsModel))]
    [Export(typeof(IDisposable))]
    public sealed class ResultsModel : ModelBase<IResultsService>, IResultsModel, IResultsServiceCallback
    {
        #region IResultsService Implementation
        /// <summary>
        /// Authentifie le client sur le service
        /// </summary>
        /// <param name="token">Jeton de sécurité</param>
        /// <remarks>Le jeton de sécurité est obtenu lors de la connexion au service de lobby</remarks>
        public void Authenticate(Guid token)
        {
            base.Service.Authenticate(token);
        }

        /// <summary>
        /// Envoie d'une demande pour récupérer les informations sur le serveur.
        /// </summary>
        /// <remarks>La récupération des informations entraine la déconnection du serveur</remarks>
        public void RequestResultInfos()
        {
            base.Service.RequestResultInfos();
        }
        #endregion

        #region IResultsModel Implementation
        /// <summary>
        /// Se produit lors de la récupération des informations de résultat de la partie
        /// </summary>
        public event EventHandler<EventArgs<ResultInfo>> OnResponseResultInfos;
        #endregion

        #region IResultsServiceCallback Implementation
        void IResultsServiceCallback.ResponseResultInfos(ResultInfo infos)
        {
            if (OnResponseResultInfos != null)
                OnResponseResultInfos(this, new EventArgs<ResultInfo>(infos));
        }
        #endregion
    }
}
